//导入用户集合的构造函数
const { User, validateUser } = require('../../model/user.js');
//导入bcrypt
const bcrypt = require('bcrypt');


module.exports = async (req, res, next) => {
	try {
		//实施验证
		// statements
		await validateUser(req.body);
	} catch(e) {
		// statements
		//验证没有通过 重定向到用户添加页面 并将错误信息作为参数传递给请求地址
		// return res.redirect(`/admin/user-edit?message=${e.message}`)
		//JSON.stringify()将对象数据转换为字符串数据类型
		return next(JSON.stringify({path: '/admin/user-edit', message: e.message}));
	}
	//根据邮箱地址查询用户是否存在
	let user = await User.findOne({email: req.body.email});

	if (user) {
	    // return res.redirect(`/admin/user-edit?message=邮箱已被注册`);
	    return next(JSON.stringify({path: '/admin/user-edit', message: '邮箱已被注册'}));
	}

	//对密码进行加密
	//生成随机字符串
	const salt = await bcrypt.genSalt(10);
	//加密
	const password = await bcrypt.hash(req.body.password, salt);
	//密码替换
	req.body.password = password;
	// res.send(req.body);
	//将用户信息添加到数据库中
	await User.create(req.body);
	//将页面重定向到用户页面
	res.redirect('/admin/user');
}